iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
0
自我挑戰組

學習筆記系列 第 7

及時編譯(JIT)

  • 分享至 

  • xImage
  •  

記錄學習內容。
主要是看網路上的文章和影片,做些紀錄。
內容可能有錯誤。

看一下Flutter的維基介紹:
Flutter

Flutter是使用Dart語言編寫,並利用該語言的許多進階功能。
Flutter是一個由Google開發的開源行動應用軟體開發套件
Flutter在Dart虛擬機器中執行,該虛擬機器具有即時編譯執行引擎。

想來了解及時編譯是什麼:
即時編譯

單看維基看不太懂,在回去複習一下java:
https://ithelp.ithome.com.tw/articles/10213590

Core Java Tutorial 07 - what's a Java Virtual Machine ( why Java is a platform independent language)

2. Why and How Java is platform independent

整理:

1
微處理器

微處理器英文叫 microprocessor
分了幾種應用:
我們電腦裡的就叫做中央處理器 (Central Processing Unit,縮寫:CPU)
、還有玩遊戲的圖形處理器(Graphics Processing Unit,縮寫:GPU;又稱顯示卡)

中央處理器像是有intel處理器、AMD處理器 。因為每家廠商的設計都不同,所以組語和機器語言的設計都不同。

2
Java的「一次編寫,到處執行」的跨平台特性:
https://ithelp.ithome.com.tw/upload/images/20200816/201119949EoGASJES2.png

意思就是:

我們平常寫的java 會先編譯(compile)成另一種語言(類似組合語言、中間語言之類的,java的稱為Java bytecode)

然後這個java bytecode 不管放到哪個作業系統 ,都可以透過不同的jvm,直譯 (interpreter),執行程式。

關於直譯器:
直譯器

直譯器(interpreter),是一種程式,能夠把程式語言一行一行直接轉譯執行。直譯器的程式運行速度比較緩慢。它不會一次把整個程式轉譯出來,而是每轉譯一行程式敘述就立刻執行,然後再轉譯下一行,再執行,如此不停地進行下去。

所以寫好一次HelloWorld.java 經過編譯成HelloWorld.class 。
這一個HelloWorld.class檔案 可以帶到任何一台有jvm的機器 執行(直譯)。

接著來看:
Core Java Tutorial 08 - Just in Time Compiler ( understanding JVM working in detail)

整理

1
直譯器(interpreter)是
直譯一行code變成0101 執行 ,在 直譯一行code變成0101 執行….
直到每行code結束。

2
維基 在 JIT 裡有一段:

代碼可以在即將執行時進行編譯(因此稱為「即時」),然後快取並在以後重用,無需重新編譯。

即時編譯(JIT) 比 直譯器(interpreter)好的地方 就在於:
假設有一段組合語言 ,像是 jump 100 ,之類的 ,重複在程式碼出現了1000次 。

直譯器(interpreter) 會把 jump 100。重複組譯1000次 同樣的機器語言 。

但是JIT會把這個 機器語言 存在記憶體(快取) ,下次看到這行組語的時候
,就可以 直接 從記憶體 拿這段機器語言執行 ,不用在組譯999次 。

3
維基這段:

JIT編譯是動態編譯的一種形式,允許自適應最佳化,比如動態重編譯和特定於微架構的加速

影片裡有講,如果原本的bytecode裡面有多餘的程式 造成 程式變慢。
如果JIT有{自適應最佳化}功能 ,會讓bytecode升等,讓程式變快。

4
像是
Java HotSpot Performance Engine

就用到了及時編譯 跟 自適應最佳化 的功能


上一篇
Ruby on Rails ,LINE Bot 學習筆記
下一篇
動態規劃 Dynamic Programming、費氏數列、其他問題
系列文
學習筆記46
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言